package com.ww.springboot.boot.javabase.hashmap.bitmap;

import cn.hutool.bloomfilter.bitMap.BitMap;
import cn.hutool.bloomfilter.bitMap.IntMap;
import com.carrotsearch.sizeof.RamUsageEstimator;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * 描述：比特 B 字节 字
 * <p>
 * bitmap:
 * 每位数integer都是32位(bit)
 * 1位数字可以存32个值 表示1~32都存在
 * 实现:
 * 将对应的位数变为1   使用 | 或        10111 | 100000
 * <p>
 * 判断存不存在时 将值反向解析即可
 * <p>
 * 删除值 将对应位数设为0即可
 *
 * @author wanwei
 * @since 2021-12-10 14:24
 */
public class BitmapDemo2 {
    public static void main(String[] args) {
        //1->32 4->128 32*size
        BitMap bitMap = new IntMap(100000);
        System.out.println("初始大小:" + RamUsageEstimator.sizeOf(bitMap));
        for (int i = 0; i < 3200000; i++) {
            //System.out.println(i);
            bitMap.add(i);
        }

        //判断值存不存在 1.找到在第几个数 2.将对应的位数右移到个位 再与1&运算 判断是不是1即可
        bitMap.contains(100);


        List<Integer> list = IntStream.range(0, 3200000).boxed().collect(Collectors.toList());
        System.out.println("bitmap size :" +RamUsageEstimator.sizeOf(bitMap));
        System.out.println("list size :" +RamUsageEstimator.sizeOf(list));
    }
}
